🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / discovery / src / commonMain / kotlin / org / meshtastic / feature / discovery / scan / Check24GhzCapability.kt
Displaying Raw • Download
feature/discovery/src/commonMain/kotlin/org/meshtastic/feature/discovery/scan/Check24GhzCapability.kt fix/fdroid-map-rendering (113121c4) Text, 4.13 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.discovery.scan
Tff7b72import T7ee787org.koin.core.annotation.Single
Tff7b72import T7ee787org.meshtastic.core.model.DeviceHardware
Tff7b72import T7ee787org.meshtastic.core.repository.DeviceHardwareRepository
Tff7b72import T7ee787org.meshtastic.core.repository.NodeRepository
T8b949e/** Result of a 2.4 GHz capability check. */
Tff7b72sealed Tff7b72interface T56d364HardwareCapabilityResult Tb4b4b4{
T8b949e/** The connected radio supports 2.4 GHz operation. */
Tff7b72data Tff7b72object T56d364Supported Tb4b4b4: Te6edf3HardwareCapabilityResult
T8b949e/** The connected radio does NOT support 2.4 GHz operation. */
Tff7b72data Tff7b72class T56d364UnsupportedTb4b4b4(Tff7b72val Te6edf3reasonTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4: Te6edf3HardwareCapabilityResult
T8b949e/** Capability could not be determined (hardware data unavailable or ambiguous). */
Tff7b72data Tff7b72class T56d364UnknownTb4b4b4(Tff7b72val Te6edf3reasonTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4: Te6edf3HardwareCapabilityResult
Tb4b4b4}
T8b949e/**
* Determines whether the currently connected radio supports 2.4 GHz LoRa operation (SX1280 chip).
*
* Uses a layered heuristic:
* 1. Check for explicit `2.4ghz` or `sx1280` tags in the hardware metadata.
* 2. Check the platformIO target or slug for `sx1280`, `2.4`, or `2400` patterns.
* 3. Default to [HardwareCapabilityResult.Unknown] when no evidence is available.
*/
Tf0883e@Single
Tff7b72class T56d364Check24GhzCapabilityTb4b4b4(
Tff7b72private Tff7b72val Te6edf3nodeRepositoryTb4b4b4: Te6edf3NodeRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3deviceHardwareRepositoryTb4b4b4: Te6edf3DeviceHardwareRepositoryTb4b4b4,
Tb4b4b4) Tb4b4b4{
T8b949e/**
* Checks if the currently connected radio supports 2.4 GHz. Returns [HardwareCapabilityResult.Unknown] if not
* connected or hardware data is unavailable.
*/
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffReturnCountTa5d6ff"Tb4b4b4)
Tff7b72suspend Tff7b72operator Tff7b72fun Td2a8ffinvokeTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3HardwareCapabilityResult Tb4b4b4{
Tff7b72val Te6edf3ourNode Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3ourNodeInfoTb4b4b4.Te6edf3value Tff7b72?: Tff7b72return Te6edf3HardwareCapabilityResultTb4b4b4.Te6edf3UnknownTb4b4b4(Ta5d6ff"Ta5d6ffNo radio connectedTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3hwModel Tff7b72= Te6edf3ourNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3hw_modelTb4b4b4.Te6edf3value
Tff7b72if Tb4b4b4(Te6edf3hwModel Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72return Te6edf3HardwareCapabilityResultTb4b4b4.Te6edf3UnknownTb4b4b4(Ta5d6ff"Ta5d6ffHardware model unknownTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3myNodeInfo Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3myNodeInfoTb4b4b4.Te6edf3value
Tff7b72val Te6edf3target Tff7b72= Te6edf3myNodeInfoTff7b72?.Te6edf3pioEnv
Tff7b72val Te6edf3hw Tff7b72=
Te6edf3deviceHardwareRepositoryTb4b4b4.Te6edf3getDeviceHardwareByModelTb4b4b4(Te6edf3hwModelTb4b4b4, Te6edf3targetTb4b4b4)Tb4b4b4.Te6edf3getOrNullTb4b4b4(Tb4b4b4)
Tff7b72?: Tff7b72return Te6edf3HardwareCapabilityResultTb4b4b4.Te6edf3UnknownTb4b4b4(Ta5d6ff"Ta5d6ffHardware metadata unavailable for model Tffd700$Te6edf3hwModelTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3evaluateTb4b4b4(Te6edf3hwTb4b4b4)
Tb4b4b4}
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffReturnCountTa5d6ff"Tb4b4b4)
Tff7b72internal Tff7b72fun Td2a8ffevaluateTb4b4b4(Te6edf3hwTb4b4b4: Te6edf3DeviceHardwareTb4b4b4)Tb4b4b4: Te6edf3HardwareCapabilityResult Tb4b4b4{
T8b949e// Layer 1: Check explicit tags
Tff7b72val Te6edf3tags Tff7b72= Te6edf3hwTb4b4b4.Te6edf3tagsTb4b4b4.Te6edf3orEmptyTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4) Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3tagsTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657it Tff7b72in Te6edf3SUPPORTED_TAGS Tb4b4b4}Tb4b4b4) Tff7b72return Te6edf3HardwareCapabilityResultTb4b4b4.Te6edf3Supported
Tff7b72if Tb4b4b4(Te6edf3tagsTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657it Tff7b72in Te6edf3UNSUPPORTED_TAGS Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3HardwareCapabilityResultTb4b4b4.Te6edf3UnsupportedTb4b4b4(Ta5d6ff"Ta5d6ffHardware tagged as sub-GHz onlyTa5d6ff"Tb4b4b4)
Tb4b4b4}
T8b949e// Layer 2: Check platformioTarget or hwModelSlug for SX1280/2.4GHz patterns
Tff7b72val Te6edf3targetLower Tff7b72= Te6edf3hwTb4b4b4.Te6edf3platformioTargetTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3slugLower Tff7b72= Te6edf3hwTb4b4b4.Te6edf3hwModelSlugTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3SUPPORTED_PATTERNSTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657it Tff7b72in Te6edf3targetLower Tff7b72|Tff7b72| Tffa657it Tff7b72in Te6edf3slugLower Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3HardwareCapabilityResultTb4b4b4.Te6edf3Supported
Tb4b4b4}
T8b949e// Layer 3: No definitive evidence — default to unknown/unsupported
Tff7b72return Te6edf3HardwareCapabilityResultTb4b4b4.Te6edf3UnknownTb4b4b4(Ta5d6ff"Ta5d6ffCannot verify 2.4 GHz support for Tffd700${Te6edf3hwTb4b4b4.Te6edf3displayNameTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3SUPPORTED_TAGS Tff7b72= Te6edf3setOfTb4b4b4(Ta5d6ff"Ta5d6ff2.4ghzTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsx1280Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflora24Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff2400mhzTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3UNSUPPORTED_TAGS Tff7b72= Te6edf3setOfTb4b4b4(Ta5d6ff"Ta5d6ffsub-ghz-onlyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsx1262Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsx1276Ta5d6ff"Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3SUPPORTED_PATTERNS Tff7b72= Te6edf3listOfTb4b4b4(Ta5d6ff"Ta5d6ffsx1280Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff2.4Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff2400Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflora24Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.07s